// Package eventbus 通用事件总线
package eventbus

// EventType 事件类型
type EventType string

// EventHandlerID 事件处理函数ID
type EventHandlerID string

// EventHandler 事件处理函数
type EventHandler func(event *Event) error

// Event 事件
type Event struct {
	Type EventType   // 事件类型
	Data interface{} // 事件携带的数据
}

// EventBus 事件总线
type EventBus interface {
	Subscribe(eventType EventType, handlerID EventHandlerID, handler EventHandler)
	Unsubscribe(eventType EventType, handlerID EventHandlerID)
	Emit(eventType EventType, data interface{})
	StartListening(opts ...Subscribe)
}

// Subscribe 订阅类型
type Subscribe interface {
	SubscribeRegister()
}
